package com.itheima.test2;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

/**
 * @Author:gy
 * @Date: 2025/09/01 9:58
 * @Description:
 */
public class Demo {
    /*
     定义一个类实现Callable接口 :  带返回值的线程实现
     在自定义类中重写call方法
     创建自定义类的对象
     创建Future的实现类FutureTask对象,把自定义类对象作为构造方法的参数传递过去
     创建Thread类的对象,把FutureTask对象作为构造方法的参数
     启动线程
     再调用get方法,就可以获取线程结束之后的接口
    * */
    public static void main(String[] args) throws Exception {
        //创建Callable实现类的对象
        MyCallable myCallable1 = new MyCallable();
        MyCallable myCallable2 = new MyCallable();
        // 创建Future的实现类FutureTask对象,把自定义类对象作为构造方法的参数传递过去
        // 他的作用是可以获取线程执行完成之后的结果
        FutureTask<String> ft1 = new FutureTask<String>(myCallable1);
        FutureTask<String> ft2 = new FutureTask<String>(myCallable2);
        //创建线程类对象
        Thread t1 = new Thread(ft1);
        Thread t2 = new Thread(ft2);

        //开启线程
        t1.start();
        t2.start();
        //想要接受返回值   现成执行完之后的返回值
        String s1 = ft1.get();
        String s2 = ft2.get();
        System.out.println(s1);
        System.out.println(s2);
    }
}
